package com.autotest.nore.common.utils;

import com.auth0.jwt.JWT;
import com.auth0.jwt.algorithms.Algorithm;
import com.auth0.jwt.exceptions.JWTCreationException;
import com.auth0.jwt.exceptions.JWTVerificationException;
import com.auth0.jwt.interfaces.DecodedJWT;
import com.auth0.jwt.interfaces.JWTVerifier;

import java.util.Date;

public class JwtUtils {

    // 密钥（应存储在安全的地方，例如环境变量或配置文件中）
    private static final String SECRET_KEY = "noreTestSecret";

    // Token 有效期（单位：毫秒）
    private static final long EXPIRATION_TIME = 3600 * 1000 * 24 * 7; // 7天

    /**
     * 生成 JWT Token
     *
     * @param username 用户名
     * @return JWT Token
     */
    public static String generateToken(String username) {
        try {
            Algorithm algorithm = Algorithm.HMAC256(SECRET_KEY);
            return JWT.create()
                    .withSubject(username) // 设置主题（通常是用户名或用户ID）
                    .withIssuedAt(new Date()) // 设置签发时间
                    .withExpiresAt(new Date(System.currentTimeMillis() + EXPIRATION_TIME)) // 设置过期时间
                    .sign(algorithm); // 签名
        } catch (JWTCreationException exception) {
            throw new RuntimeException("生成 Token 失败", exception);
        }
    }

    /**
     * 验证 JWT Token
     *
     * @param token JWT Token
     * @return 用户名
     */
    public static String validateToken(String token) {
        try {
            Algorithm algorithm = Algorithm.HMAC256(SECRET_KEY);
            JWTVerifier verifier = JWT.require(algorithm).build();
            DecodedJWT jwt = verifier.verify(token);
            return jwt.getSubject(); // 返回 Token 中的主题（用户名）
        } catch (JWTVerificationException exception) {
            throw new RuntimeException("Token 验证失败", exception);
        }
    }



}
